package com.ims.equation.server;

import com.ims.equation.server.iface.LaTexNotation;

public class SupportedEquations {

	/**
	 * Formula symbols.
	 * 
	 * @author Marcus
	 * 
	 */
	public enum LaTexMath implements LaTexNotation {

		FRACTION("\\frac{n}{d}"), 
		SQUARE("\\sqrt{r}"), 
		INTEGRAL("\\int"), 
		POWER("^"), 
		CHOOSE("{{n} \\choose {k}"),
		SUM("\\sum");

		private String notation;

		private LaTexMath(String pNotation) {
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}
	}

	/**
	 * Mathematic symbols.
	 * 
	 * @author Marcus
	 * 
	 */
	public enum LaTexMathSymbols implements LaTexNotation {

		LESS_OR_EQUAL("\\leq"), 
		GREATER_OR_EQUAL("\\geq"), 
		SUBSET_OR_EQUAL("\\subseteq"), 
		SUPSET_OR_EQUAL("\\supseteq"), 
		IN("\\in"),
		DISJUNCT("\\bigcap"),
		UNION("\\bnigcup"),
		FOR_ALL("\\forall"),
		EXIST("\\exists"),
		PARTIAL("\\partial"),
		EMPTY_SET("\\emptyset"),
		NOT_FOR_ALL("\\not \\forall"),
		NOT_IN("\\not \\in"),
		NOT_LESS_OR_EQUAL("\\not \\leq"),
		NOT_GREATER_OR_EQUAL("\\not \\geq"),
		NOT_EXISTS("\\not \\exists"),
		NOT_SUBSET("\\not \\subset"),
		NOT_PURE("\\not {x}");

		private String notation;

		private LaTexMathSymbols(String pNotation) {
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}

	}
	
	/**
	 * Mathematoc symbols.
	 * 
	 * @author Marcus
	 * 
	 */
	public enum LaTexSetOfNumbers implements LaTexNotation {
		NATURAL("\\mathbb{N}"), 
		INTEGER("\\mathbb{Z}"), 
		RATIONAL("\\mathbb{Q}"), 
		FLOAT("\\mathbb{R}"), 
		COMPLEX("\\mathbb{C}"),
		FREE("\\mathbb{x}");

		private String notation;

		private LaTexSetOfNumbers(String pNotation) {
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}

	}
	
	/**
	 * Special Symbols.
	 * 
	 * @author Marcus
	 * 
	 */
	public enum LaTexSymbols implements LaTexNotation {

		INFINITY("\\infty");

		private String notation;

		private LaTexSymbols(String pNotation) {
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}

	}

	/**
	 * The greek letters.
	 * 
	 * @author Marcus
	 */
	public enum LaTexGreekLetters implements LaTexNotation {

		alpha("\\alpha"),
		ALPHA("A"), 
		beta("\\beta"), 
		BETA("B"), 
		gamma("\\gamma"), 
		GAMMA("\\Gamma"), 
		delta("\\delta"), 
		DELTA("\\Delta"), 
		epsilon("\\epsilon"), 
		EPSILON("E"), 
		varepsilon("\\varepsilon"), 
		zeta("\\zeta"), 
		ZETA("Z"), 
		eta("\\eta"), 
		ETA("H"), 
		theta("\\theta"), 
		THETA("\\Theta"), 
		iota("\\iota"), 
		IOATA("I"), 
		kappa("\\kappa"), 
		KAPPA("K"), 
		lambda("\\lambda"), 
		LAMDA("\\LAMBDA"), 
		mu("\\mu"), 
		MU("M");

		private String notation;

		private LaTexGreekLetters(String pNotation) {
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}

	}
	
	/**
	 * Diakrit Symbols.
	 * 
	 * @author Marcus
	 *
	 */
public enum LaTexDiakritSymbols implements LaTexNotation {
		
		CIRCUMFLEX("\\^{x}"),
		HACEK("\\v{x}"),
		TILDE("\\~{x}"),
		TREMA("\\ \"{x}"),
		RING("\\r{x}"),
		MACRON("\\={x}"),
		UNDERLINE("\\b{x}"),
		BREVIS("\\u{x}"),
		DOT_ABOVE("\\.{x}"),
		DOT_DOWN("\\d{x}"),
		CEDILE("\\c{x}"),
		OGONEK("\\k{x}");
		
		private String notation;
		
		private LaTexDiakritSymbols(String pNotation){
			this.notation = pNotation;
		}

		@Override
		public String getNotation() {
			return this.notation;
		}
		
	}

}
